在上一篇搞定球聚時間的選單後,我們需要計算下次球聚的日期 (只顯示星期幾而沒有日期,不方便記日子)
藉由Ruby的Time class和rails的helper,可以將計算的過程藏在後面,而不弄亂前端的view
首先,因為球聚的時間是記錄星期幾,在model裡僅是個數字 (0~6表示週日到週六)
下次球聚的日期會根據使用者看到文章的當天計算
例如,預計週三聚會,使用者週四才看到文章。此時需顯示下次聚會日期 (也就是下週三)
Time Class
Ruby的Time class提供wday,可得知日期對應到星期幾,例如1
2
3
4 t = Time.now
=> 2016-04-22 15:20:42 +0800
t.wday
=> 5
View
1 | ...略 |
Helper
day_offset是預計週幾聚會,利用Time.now.wday和它之間的關係算出下次聚會日期
next_meetup_date除了顯示日期,還加上星期幾1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16module PostsHelper
def calculate_date(day_offset)
meetup_day = day_offset
current_day = Time.now.wday
next_date = DateTime.now + (meetup_day - current_day).days
if meetup_day < current_day
next_date += 7.days # Next week
end
next_date.strftime('%Y/%m/%d')
end
def next_meetup_date(day_offset)
calculate_date(day_offset) + ' (' + I18n.t(:"date.day_names")[day_offset] + ')'
end
end
使用helper的好處是將來如果要改變顯示格式,只要改一個地方就好,其它的view也能使用。